#pragma once
#include <vector>
#include <string>
#include <utility>
#include <map>
#include <set>
#include <sys/types.h>
#include <dirent.h>
#include <fstream>
#include <sstream>
#include <ctype.h>
#include <cppjieba/Jieba.h>
#include <../include/SplitToolCppjieba.h>
#include <../include/SplitToolUTF8.h>
#include <memory>

using std::cout;
using std::endl;
using std::map;
using std::pair;
using std::set;
using std::string;
using std::vector;
using std::ifstream;
using std::ofstream;
using std::istringstream;
using std::unique_ptr;

class DictProducer
{
public:
    DictProducer();
    void buildEnDict();
    void buildEnIndex();
    void storeEnDict(const string &filepath);
    void storeEnIndex(const string &filepath);

    void buildCnDict();
    void buildCnIndex();
    void storeCnDict(const string &filepath);
    void storeCnIndex(const string &filepath);

private:
    // 英文
    vector<string> _files;           // 存储英文语料文件
    map<string, int> _dict; // 存储单词，词频
    map<char, set<int>> _index;    // 存储索引，一个单词在哪些行出现
    set<string> _stop;               // 存储停用词

    //中文
    vector<string> _filesZh;           // 存储英文语料文件
    map<string, int> _dictZh; // 存储单词，词频
    map<string, set<int>> _indexZh;    // 存储索引，一个单词在哪些行出现
    set<string> _stopZh;               // 存储停用词

};